package com.hina.rec.common.utils;

import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.StrUtil;
import com.hina.rec.common.enums.ErrorCode;
import com.hina.rec.common.exception.BusinessException;

import java.util.Collection;
import java.util.Objects;

/**
 * 断言工具类
 *
 * @author liaosp
 * @date 2023-11-15
 */
public class AssertUtil {


    /**
     * 断言对象不为空
     *
     * @param object  对象
     * @param message 错误消息
     */
    public static void notNull(Object object, String message) {
        if (object == null) {
            throw new BusinessException(message);
        }
    }

    /**
     * 断言对象不为空
     *
     * @param object  对象
     * @param errorCode 错误消息
     */
    public static void notNull(Object object, ErrorCode errorCode) {
        if (object == null) {
            throw new BusinessException(errorCode);
        }
    }

    /**
     * 断言字符串不为空
     *
     * @param str     字符串
     * @param message 错误消息
     */
    public static void isNotBlank(String str, String message) {
        if (StrUtil.isBlank(str)) {
            throw new BusinessException(message);
        }
    }


    /**
     * 断言集合不为空
     *
     * @param collection 集合
     * @param message    错误消息
     */
    public static void notEmpty(Collection<?> collection, String message) {
        if (CollUtil.isEmpty(collection)) {
            throw new BusinessException(message);
        }
    }

    /**
     * 断言表达式为真
     *
     * @param expression 表达式
     * @param message    错误消息
     */
    public static void isTrue(boolean expression, ErrorCode errorCode) {
        if (!expression) {
            throw new BusinessException(errorCode);
        }
    }

    /**
     * 断言表达式为真
     *
     * @param expression 表达式
     * @param message    错误消息
     */
    public static void isTrue(boolean expression, String message) {
        if (!expression) {
            throw new BusinessException(message);
        }
    }

    /**
     * 断言表达式为假
     *
     * @param expression 表达式
     * @param message    错误消息
     */
    public static void isFalse(boolean expression, String message) {
        if (expression) {
            throw new BusinessException(message);
        }
    }

    /**
     * 断言两个对象不相等
     *
     * @param actual   实际对象
     * @param expected 期望对象
     * @param message  message
     */
    public static void notEquals(Object actual, Object expected, String message) {
        if (!Objects.equals(actual, expected)) {
            throw new BusinessException(message);
        }
    }

    /**
     * 断言象是否为空
     *
     * @param object  object
     * @param message message
     */
    public static void isNull(Object object, String message) {
        if (Objects.nonNull(object)) {
            throw new BusinessException(message);
        }
    }


    /**
     * 断言表达式为真
     *
     * @param collection collection
     * @param data       data
     * @param errorMsg   错误消息
     */
    public static <T> void contains(Collection<T> collection, T data, String errorMsg) {
        if (!CollUtil.contains(collection, data)) {
            throw new BusinessException(errorMsg);
        }
    }
}